﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Smart
{
    public partial class frmBelgeGiris : Form
    {
        public enum IslemTipleri
        {
            Irsaliye,
            DepoSevk,
            Siparis
        }

        public IslemTipleri IslemTipi { get; set; }
        public EvrakTipleri EvrakTipi { get; set; }
        public Cari SecilenCari { get; set; }

        public frmBelgeGiris()
        {
            InitializeComponent();
            cmbTip.Items.Add("Toptan");
            cmbTip.Items.Add("Perakende");
            gridView1.DoubleClick += new EventHandler(gridView1_DoubleClick);
            gridView1.KeyDown += new KeyEventHandler(gridView1_KeyDown);
            txtSeri.KeyDown += new KeyEventHandler(txtSeri_KeyDown);
            txtSira.KeyDown += new KeyEventHandler(txtSira_KeyDown);
        }

        void gridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                GridSec();
            }
        }

        void txtSira_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                ileriClick();
            }
        }

        private void ileriClick()
        {
            if ((IslemTipi == IslemTipleri.Irsaliye || IslemTipi == IslemTipleri.Siparis) && !string.IsNullOrEmpty(txtSeri.Text))
            {
                IslemeBasla();
            }
            else if (IslemTipi == IslemTipleri.DepoSevk && !string.IsNullOrEmpty(txtSeri.Text) && cmbDepo.SelectedIndex > 0)
            {
                IslemeBasla();
            }
            else
            {
                MessageBox.Show("Lütfen Bilgileri eksiksiz giriniz !");
            }
        }

        void txtSeri_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtSira.Text = MaxSira().ToString();
                txtSira.Focus();
            }
        }

        void gridView1_DoubleClick(object sender, EventArgs e)
        {
            GridSec();
        }

        private void GridSec()
        {
            if (gridView1.RowCount > 0)
            {
                txtCariKodu.Text = gridView1[gridView1.CurrentRowIndex, 2].ToString();
                txtCariAdi.Text = gridView1[gridView1.CurrentRowIndex, 1].ToString();
                using (Query q = new Query(ProgramTipleri.Mikro))
                {
                    int id = Convert.ToInt32(gridView1[gridView1.CurrentRowIndex, 0]);
                    q.Add(BackOffice.Get.CariBilgi(id));
                    var sonuc = q.ToList(new { Adi = "", Adres = "", Kodu = "", VergiDaire = "", VergiNo = "" }).FirstOrDefault();
                    if (sonuc != null)
                        SecilenCari = new Cari() { Adi = sonuc.Adi, Adres = sonuc.Adres, Id = id, Kodu = sonuc.Kodu, VergiDaire = sonuc.VergiDaire, VergiNo = sonuc.VergiNo };
                }
            }
            tabControl1.SelectedIndex = 0;
        }

        bool sipShow = false;

        private void toolbarControl1_ItemEntered(object sender, EventArgs e)
        {
            switch (toolbarControl1.SelectedIndex)
            {
                case 0:
                    if (MessageBox.Show("Evrak'tan çıkmak istediğinize eminmisiniz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        this.Close();
                    }
                    break;
                case 1:
                    if (!sipShow)
                    {
                        sipShow = true;
                        Sip.Show();
                    }
                    else
                    {
                        sipShow = false;
                        Sip.Hide();
                    }
                    break;
                case 2:
                    ileriClick();
                    break;
                default:
                    break;
            }
        }

        private void IslemeBasla()
        {
            if (Program.Session[Settings.BelgeGirisZorunlu].ToString() == "True" && string.IsNullOrEmpty(txtBelgeNo.Text))
            {
                MessageBox.Show("Belge No girişi zorunludur !");
                return;
            }

            EvrakTipiBelirle();

            frmEvrak evr = new frmEvrak();
            if (string.IsNullOrEmpty(txtSira.Text))
            {
                evr.EskiEvrak = false;
                txtSira.Text = MaxSira().ToString();
            }
            else
            {
                if (BackOffice.Get.EvrakVarmi(this.EvrakTipi, txtSeri.Text, Cevir.Parse<int>(txtSira.Text)))
                {
                    //if (!BackOffice.Get.BagliMi(this.EvrakTipi, txtSeri.Text, Cevir.Parse<int>(txtSira.Text)))
                    //{
                    DialogResult res = MessageBox.Show("Bu evrak sistemde mevcuttur. Değiştirmek istiyormusunuz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    if (res == DialogResult.No)
                    {
                        evr.EskiEvrak = false;
                        txtSira.Text = MaxSira().ToString();
                    }
                    else
                        evr.EskiEvrak = true;
                    //}
                    //else
                    //{
                    //    MessageBox.Show("Evrak Faturalaştırılmıştır ! değiştiremezsiniz");
                    //    return;
                    //}
                }
                else
                {
                    DialogResult res = MessageBox.Show("Böyle bir evrak bulunamadı ! yine de devam etmek istediğinize eminmisiniz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    if (res == DialogResult.No)
                        return;
                    else
                        evr.EskiEvrak = false;
                }

            }
            if (this.IslemTipi != IslemTipleri.DepoSevk)
            {
                if (string.IsNullOrEmpty(txtCariKodu.Text) && string.IsNullOrEmpty(txtCariAdi.Text) && evr.EskiEvrak == false)
                {
                    MessageBox.Show("Lütfen Cari Seçiniz !");
                    return;
                }
            }

            evr.SecilenCari = SecilenCari;
            evr.SorMerkezKodu = ((ComboItem)cmbDepo.SelectedItem).Value.ToString();
            evr.DepoKodu = ((ComboItem)cmbDepo.SelectedItem).Value.ToString();
            evr.EvrakTipi = EvrakTipi;
            evr.Seri = txtSeri.Text;
            evr.Sira = Convert.ToInt32(txtSira.Text);
            evr.BelgeNo = txtBelgeNo.Text;
            evr.Tarih = dteTarih.Value;
            evr.Show();
            this.Close();
        }

        private void EvrakTipiBelirle()
        {
            switch (IslemTipi)
            {
                case IslemTipleri.Irsaliye:
                    switch (cmbCins.SelectedIndex)
                    {
                        case 0:
                            if (cmbTip.SelectedIndex == 0)
                                this.EvrakTipi = EvrakTipleri.ToptanAlisIrsaliyesi;
                            else
                                this.EvrakTipi = EvrakTipleri.PerakendeAlisIrsaliyesi;
                            break;
                        case 1:
                            if (cmbTip.SelectedIndex == 0)
                                this.EvrakTipi = EvrakTipleri.ToptanAlisIadeIrsaliyesi;
                            else
                                this.EvrakTipi = EvrakTipleri.PerakendeAlisIadeIrsaliyesi;
                            break;
                        case 2:
                            if (cmbTip.SelectedIndex == 0)
                                this.EvrakTipi = EvrakTipleri.ToptanSatisIrsaliyesi;
                            else
                                this.EvrakTipi = EvrakTipleri.PerakendeSatisIrsaliyesi;
                            break;
                        case 3:
                            if (cmbTip.SelectedIndex == 0)
                                this.EvrakTipi = EvrakTipleri.ToptanSatisIadeIrsaliyesi;
                            else
                                this.EvrakTipi = EvrakTipleri.PerakendeSatisIadeIrsaliyesi;
                            break;
                    }
                    break;
                case IslemTipleri.DepoSevk:
                    switch (cmbCins.SelectedIndex)
                    {
                        case 0:
                            this.EvrakTipi = EvrakTipleri.GelenDepoSevk;
                            break;
                        case 1:
                            this.EvrakTipi = EvrakTipleri.GidenDepoSevk;
                            break;
                    }
                    break;
                case IslemTipleri.Siparis:
                    switch (cmbCins.SelectedIndex)
                    {
                        case 0:
                            this.EvrakTipi = EvrakTipleri.AlinanSiparis;
                            break;
                        case 1:
                            this.EvrakTipi = EvrakTipleri.VerilenSiparis;
                            break;
                        case 2:
                            this.EvrakTipi = EvrakTipleri.SubeSiparis;
                            break;
                    }
                    break;
            }
        }

        private void CariListele(string filtre, bool cariKodaGore)
        {
            using (Query q = new Query(ProgramTipleri.Mikro))
            {
                q.Add(BackOffice.Get.CariListSql(filtre, cariKodaGore));
                var list = q.ToList(new { id = 0, Kodu = "", Unvani = "" });
                gridView1.SuspendLayout();
                gridView1.DataSource = list;
                gridView1.SetColumnStyles(list, new[] 
                                            { 
                                                new ColumnStyle("id", -1), 
                                                new ColumnStyle("Cari Ünvanı","Unvani", 300),
                                                new ColumnStyle("Cari Kodu","Kodu", 150)
                                            });
                gridView1.ResumeLayout();
                tabControl1.SelectedIndex = 1;
                gridView1.AutoSizeCol(1);
                gridView1.AutoSizeCol(2);
            }
        }

        private int MaxSira()
        {
            EvrakTipiBelirle();
            return BackOffice.Get.MaxSira(EvrakTipi, txtSeri.Text);
        }

        private void SetEvrakSeri()
        {
            EvrakTipiBelirle();
            switch (this.EvrakTipi)
            {
                case EvrakTipleri.ToptanAlisIrsaliyesi:
                case EvrakTipleri.PerakendeAlisIrsaliyesi:
                    txtSeri.Text = Program.Session[Settings.SaglayicidanMalKabulSerisi].ToString();
                    break;
                case EvrakTipleri.ToptanAlisIadeIrsaliyesi:
                case EvrakTipleri.PerakendeAlisIadeIrsaliyesi:
                    txtSeri.Text = Program.Session[Settings.SaglayiciyaIadeSeri].ToString();
                    break;
                case EvrakTipleri.ToptanSatisIrsaliyesi:
                case EvrakTipleri.PerakendeSatisIrsaliyesi:
                    txtSeri.Text = Program.Session[Settings.MusteriyeSatisEvrakSeri].ToString();
                    break;
                case EvrakTipleri.ToptanSatisIadeIrsaliyesi:
                case EvrakTipleri.PerakendeSatisIadeIrsaliyesi:
                    txtSeri.Text = Program.Session[Settings.MusteridenIadeAlisSeri].ToString();
                    break;
                case EvrakTipleri.GelenDepoSevk:
                    txtSeri.Text = Program.Session[Settings.GelenSevkEvrakSeri].ToString();
                    break;
                case EvrakTipleri.GidenDepoSevk:
                    txtSeri.Text = Program.Session[Settings.GidenDepoSevkSeri].ToString();
                    break;
                case EvrakTipleri.AlinanSiparis:
                    txtSeri.Text = Program.Session[Settings.AlinanSiparisEvrakSeri].ToString();
                    break;
                case EvrakTipleri.VerilenSiparis:
                    txtSeri.Text = Program.Session[Settings.VerilenSiparisSeri].ToString();
                    break;
                case EvrakTipleri.SubeSiparis:
                    txtSeri.Text = Program.Session[Settings.SubeSiparisEvrakSeri].ToString();
                    break;
                default:
                    break;
            }
        }

        private void frmBelgeGiris_Load(object sender, EventArgs e)
        {
            cmbTip.SelectedIndex = 0;
            dteTarih.Value = DateTime.Now;
            cmbDepo.Items.Add(new ComboItem() { Text = "", Value = "" });
            cmbDepo.SelectedIndex = 0;

            switch (this.IslemTipi)
            {
                case IslemTipleri.Irsaliye:
                    lblDepo.Text = "Srm.Merkezi:";
                    cmbCins.Items.Add("Sağlayıcıdan Mal Kabul");
                    cmbCins.Items.Add("Sağlayıcıya iade");
                    cmbCins.Items.Add("Müşteriye Satış");
                    cmbCins.Items.Add("Müşteriden iade alış");
                    using (Query q = new Query(ProgramTipleri.Mikro))
                    {
                        q.Add(BackOffice.Get.SrmListSql());
                        foreach (var item in q.ToList(new { no = "", adi = "" }))
                        {
                            cmbDepo.Items.Add(new ComboItem() { Text = item.adi, Value = item.no });
                        }
                    }
                    break;
                case IslemTipleri.Siparis:
                    lblDepo.Text = "Srm.Merkezi:";
                    cmbCins.Items.Add("Alınan Sipariş");
                    cmbCins.Items.Add("Verilen Sipariş");
                    cmbCins.Items.Add("Şube Sipariş");
                    using (Query q = new Query(ProgramTipleri.Mikro))
                    {
                        q.Add(BackOffice.Get.SrmListSql());
                        foreach (var item in q.ToList(new { no = "", adi = "" }))
                        {
                            if (Program.Session.KullanilabilirSrm().Where(x => x == item.no).Count() > 0)
                            {
                                cmbDepo.Items.Add(new ComboItem() { Text = item.adi, Value = item.no });
                            }
                        }

                        for (int i = 0; i < cmbDepo.Items.Count; i++)
                        {
                            if (((ComboItem)cmbDepo.Items[i]).Value.ToString() == Program.Session.VarsayilanSrm())
                            {
                                cmbDepo.SelectedIndex = i;
                                break;
                            }
                        }
                    }
                    break;
                case IslemTipleri.DepoSevk:
                    cmbCins.Items.Add("Depo Sevk Gelen");
                    cmbCins.Items.Add("Depo Sevk Giden");
                    pnlTip.Visible = false;
                    using (Query q = new Query(ProgramTipleri.Mikro))
                    {
                        q.Add(BackOffice.Get.DepoListSql());
                        foreach (var item in q.ToList(new { no = 0, adi = "" }).Where(x => x.no != Program.Session.VarsayilanDepo()))
                        {
                            if (Program.Session.KullanilabilirDepolar().Where(x => x == item.no).Count() > 0)
                            {
                                cmbDepo.Items.Add(new ComboItem() { Text = item.adi, Value = item.no });
                            }
                        }
                    }
                    break;
            }
        }

        private void btnKodu_Click(object sender, EventArgs e)
        {
            CariListele(txtCariKodu.Text, true);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CariListele(txtCariAdi.Text, false);
        }

        private void cmbCins_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.IslemTipi == IslemTipleri.Irsaliye)
            {
                if (cmbCins.SelectedIndex > -1 && cmbTip.SelectedIndex > -1)
                {
                    pnlEvrakBilgi.Enabled = true;
                    pnlCari.Enabled = true;
                    pnlDepo.Enabled = true;
                }
            }
            else if (this.IslemTipi == IslemTipleri.Siparis)
            {
                if (cmbCins.SelectedIndex > -1)
                {
                    pnlEvrakBilgi.Enabled = true;
                    pnlCari.Enabled = true;
                    pnlDepo.Enabled = true;
                }
            }
            else
            {
                if (cmbCins.SelectedIndex > -1)
                {
                    pnlEvrakBilgi.Enabled = true;
                    pnlCari.Enabled = false;
                    pnlDepo.Enabled = true;
                }
            }

            SetEvrakSeri();
        }

        private void txtCariKodu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                CariListele(txtCariKodu.Text, true);
                if (gridView1.RowCount > 0)
                {
                    gridView1.Select(0);
                }
            }
        }

    }
}